/// 中文标题映射工具
/// 将常见动漫的英文/日文标题映射为中文
class ChineseTitleMapper {
  // 动漫标题中英文映射表
  static const Map<String, String> _titleMap = {
    // 热门动漫
    'Attack on Titan': '进击的巨人',
    'Shingeki no Kyojin': '进击的巨人',
    'Death Note': '死亡笔记',
    'One Piece': '海贼王',
    'Naruto': '火影忍者',
    'Dragon Ball': '龙珠',
    'My Hero Academia': '我的英雄学院',
    'Boku no Hero Academia': '我的英雄学院',
    'Demon Slayer': '鬼灭之刃',
    'Kimetsu no Yaiba': '鬼灭之刃',
    'Jujutsu Kaisen': '咒术回战',
    'Tokyo Ghoul': '东京喰种',
    'One Punch Man': '一拳超人',
    'Fullmetal Alchemist': '钢之炼金术师',
    'Hunter x Hunter': '全职猎人',
    'Bleach': '死神',
    'Spirited Away': '千与千寻',
    'Your Name': '你的名字',
    'Kimi no Na wa': '你的名字',
    'Weathering with You': '天气之子',
    'Tenki no Ko': '天气之子',
    'Princess Mononoke': '幽灵公主',
    'Howl\'s Moving Castle': '哈尔的移动城堡',
    'Totoro': '龙猫',
    'My Neighbor Totoro': '龙猫',
    'Akira': '阿基拉',
    'Ghost in the Shell': '攻壳机动队',
    'Evangelion': '新世纪福音战士',
    'Neon Genesis Evangelion': '新世纪福音战士',
    'Cowboy Bebop': '星际牛仔',
    'Code Geass': '反叛的鲁路修',
    'Steins;Gate': '命运石之门',
    'Monster': '怪物',
    'Mob Psycho 100': '路人超能100',
    'Violet Evergarden': '紫罗兰永恒花园',
    'Your Lie in April': '四月是你的谎言',
    'Shigatsu wa Kimi no Uso': '四月是你的谎言',
    'A Silent Voice': '声之形',
    'Koe no Katachi': '声之形',
    'Parasyte': '寄生兽',
    'Kiseijuu': '寄生兽',
    'Made in Abyss': '来自深渊',
    'Promised Neverland': '约定的梦幻岛',
    'Yakusoku no Neverland': '约定的梦幻岛',
    'Dr. Stone': '石纪元',
    'Chainsaw Man': '电锯人',
    'Spy x Family': '间谍过家家',
    'Kaguya-sama': '辉夜大小姐想让我告白',
    'JoJo\'s Bizarre Adventure': 'JOJO的奇妙冒险',
    'Jojo no Kimyou na Bouken': 'JOJO的奇妙冒险',
    // 添加更多映射
    'Kusuriya no Hitorigoto': '药师少女的独白',
    'Alien Stage': '异星舞台',
    'Oshi no Ko': '我推的孩子',
    'Frieren: Beyond Journey\'s End': '葬送的芙莉莲',
    'Sousou no Frieren': '葬送的芙莉莲',
  };

  // 类型映射
  static const Map<String, String> _genreMap = {
    'Action': '动作',
    'Adventure': '冒险',
    'Comedy': '喜剧',
    'Drama': '剧情',
    'Fantasy': '奇幻',
    'Horror': '恐怖',
    'Mystery': '悬疑',
    'Romance': '恋爱',
    'Sci-Fi': '科幻',
    'Slice of Life': '日常',
    'Sports': '运动',
    'Supernatural': '超自然',
    'Thriller': '惊悚',
    'School': '校园',
    'Military': '军事',
    'Music': '音乐',
    'Psychological': '心理',
    'Historical': '历史',
    'Mecha': '机甲',
    'Magic': '魔法',
    'Martial Arts': '武术',
    'Parody': '恶搞',
    'Police': '警察',
    'Post-Apocalyptic': '末日',
    'Samurai': '武士',
    'Space': '太空',
    'Vampire': '吸血鬼',
  };

  /// 从动漫对象获取最佳中文标题
  static String getBestChineseTitle({
    required String title,
    String? titleJapanese,
    String? titleEnglish,
    List<String> titleSynonyms = const [],
  }) {
    // 1. 首先尝试原标题的映射
    String? chineseTitle = _getChineseTitleByKey(title);
    if (chineseTitle != null) return chineseTitle;

    // 2. 尝试日文标题
    if (titleJapanese != null && titleJapanese.isNotEmpty) {
      chineseTitle = _getChineseTitleByKey(titleJapanese);
      if (chineseTitle != null) return chineseTitle;
    }

    // 3. 尝试英文标题
    if (titleEnglish != null && titleEnglish.isNotEmpty) {
      chineseTitle = _getChineseTitleByKey(titleEnglish);
      if (chineseTitle != null) return chineseTitle;
    }

    // 4. 尝试别名
    for (final synonym in titleSynonyms) {
      chineseTitle = _getChineseTitleByKey(synonym);
      if (chineseTitle != null) return chineseTitle;
    }

    // 5. 如果有日文标题，优先返回日文标题
    if (titleJapanese != null && titleJapanese.isNotEmpty && titleJapanese != title) {
      return titleJapanese;
    }

    // 6. 否则返回原标题
    return title;
  }

  /// 获取中文标题，如果没有映射则返回原标题
  static String getChineseTitle(String originalTitle) {
    return _getChineseTitleByKey(originalTitle) ?? originalTitle;
  }

  /// 根据键获取中文标题
  static String? _getChineseTitleByKey(String key) {
    if (key.isEmpty) return null;

    // 直接匹配
    if (_titleMap.containsKey(key)) {
      return _titleMap[key]!;
    }

    // 模糊匹配（去除特殊字符和空格后匹配）
    final cleanKey = _cleanTitle(key);
    for (final entry in _titleMap.entries) {
      if (_cleanTitle(entry.key) == cleanKey) {
        return entry.value;
      }
    }

    return null;
  }

  /// 获取中文类型
  static List<String> getChineseGenres(List<String> originalGenres) {
    return originalGenres.map((genre) {
      return _genreMap[genre] ?? genre;
    }).toList();
  }

  /// 清理标题，用于模糊匹配
  static String _cleanTitle(String title) {
    return title
        .toLowerCase()
        .replaceAll(RegExp(r'[^\w\s]'), '')
        .replaceAll(RegExp(r'\s+'), '');
  }

  /// 获取推荐的中文描述
  static String getChineseDescription(String originalTitle, List<String> genres, double score) {
    final chineseGenres = getChineseGenres(genres);
    
    final descriptions = <String>[];
    
    // 根据评分添加描述
    if (score >= 9.0) {
      descriptions.add('神作级别');
    } else if (score >= 8.5) {
      descriptions.add('必看佳作');
    } else if (score >= 8.0) {
      descriptions.add('优秀作品');
    } else if (score >= 7.5) {
      descriptions.add('值得一看');
    }

    // 根据类型添加描述
    if (chineseGenres.contains('动作')) {
      descriptions.add('燃爆战斗');
    }
    if (chineseGenres.contains('恋爱')) {
      descriptions.add('温馨治愈');
    }
    if (chineseGenres.contains('悬疑')) {
      descriptions.add('烧脑剧情');
    }
    if (chineseGenres.contains('奇幻')) {
      descriptions.add('异世界冒险');
    }
    if (chineseGenres.contains('日常')) {
      descriptions.add('轻松愉快');
    }
    if (chineseGenres.contains('科幻')) {
      descriptions.add('未来科技');
    }

    return descriptions.isNotEmpty ? descriptions.join(' · ') : '精彩动漫';
  }

  /// 获取中文简介翻译
  static String getChineseSynopsis(String title, String originalSynopsis) {
    // 根据动漫标题返回对应的中文简介
    final titleLower = title.toLowerCase();
    
    // 常见动漫的中文简介映射
    final synopsisMap = <String, String>{
      // 药屋系列
      'kusuriya': '在后宫中担任试毒者的少女猫猫，凭借丰富的药学知识和敏锐的观察力，解决了一系列发生在皇宫中的谜团和阴谋。她与宦官壬氏一起，守护着后宫妃嫔们的安全。',
      'apothecary': '在后宫中担任试毒者的少女猫猫，凭借丰富的药学知识和敏锐的观察力，解决了一系列发生在皇宫中的谜团和阴谋。她与宦官壬氏一起，守护着后宫妃嫔们的安全。',
      '药屋': '在后宫中担任试毒者的少女猫猫，凭借丰富的药学知识和敏锐的观察力，解决了一系列发生在皇宫中的谜团和阴谋。她与宦官壬氏一起，守护着后宫妃嫔们的安全。',
      
      // 间谍系列
      'spy': '黄昏特工为了任务需要组建假家庭，意外收养了超能力少女阿尼亚和与暗杀者约儿结为夫妻。三人各自隐瞒身份，在日常生活中展开温馨而又紧张刺激的冒险故事。',
      'family': '黄昏特工为了任务需要组建假家庭，意外收养了超能力少女阿尼亚和与暗杀者约儿结为夫妻。三人各自隐瞒身份，在日常生活中展开温馨而又紧张刺激的冒险故事。',
      '间谍': '黄昏特工为了任务需要组建假家庭，意外收养了超能力少女阿尼亚和与暗杀者约儿结为夫妻。三人各自隐瞒身份，在日常生活中展开温馨而又紧张刺激的冒险故事。',
      
      // 咒术回战
      'jujutsu': '虎杖悠仁为了拯救同学而吞下了特级咒物宿傩的手指，成为了宿傩的容器。他进入东京都立咒术高等专门学校，与同伴们一起学习咒术，对抗危险的咒灵。',
      'kaisen': '虎杖悠仁为了拯救同学而吞下了特级咒物宿傩的手指，成为了宿傩的容器。他进入东京都立咒术高等专门学校，与同伴们一起学习咒术，对抗危险的咒灵。',
      '咒术': '虎杖悠仁为了拯救同学而吞下了特级咒物宿傩的手指，成为了宿傩的容器。他进入东京都立咒术高等专门学校，与同伴们一起学习咒术，对抗危险的咒灵。',
      
      // 鬼灭之刃
      'demon': '炭治郎的家人被鬼杀害，妹妹祢豆子也变成了鬼。为了让妹妹重新变回人类，炭治郎踏上了成为鬼杀队剑士的道路，与鬼舞辻无惨为首的恶鬼展开殊死战斗。',
      'slayer': '炭治郎的家人被鬼杀害，妹妹祢豆子也变成了鬼。为了让妹妹重新变回人类，炭治郎踏上了成为鬼杀队剑士的道路，与鬼舞辻无惨为首的恶鬼展开殊死战斗。',
      'kimetsu': '炭治郎的家人被鬼杀害，妹妹祢豆子也变成了鬼。为了让妹妹重新变回人类，炭治郎踏上了成为鬼杀队剑士的道路，与鬼舞辻无惨为首的恶鬼展开殊死战斗。',
      '鬼灭': '炭治郎的家人被鬼杀害，妹妹祢豆子也变成了鬼。为了让妹妹重新变回人类，炭治郎踏上了成为鬼杀队剑士的道路，与鬼舞辻无惨为首的恶鬼展开殊死战斗。',
      
      // 进击的巨人
      'attack': '人类生活在巨大的城墙内，城墙外是吃人的巨人。艾伦·耶格尔目睹母亲被巨人吃掉后，发誓要杀光所有巨人。但随着真相逐渐揭开，人类与巨人的关系变得更加复杂。',
      'titan': '人类生活在巨大的城墙内，城墙外是吃人的巨人。艾伦·耶格尔目睹母亲被巨人吃掉后，发誓要杀光所有巨人。但随着真相逐渐揭开，人类与巨人的关系变得更加复杂。',
      '进击': '人类生活在巨大的城墙内，城墙外是吃人的巨人。艾伦·耶格尔目睹母亲被巨人吃掉后，发誓要杀光所有巨人。但随着真相逐渐揭开，人类与巨人的关系变得更加复杂。',
      
      // 我的英雄学院
      'hero': '在超能力"个性"成为常态的世界里，没有个性的绿谷出久梦想成为英雄。在遇到最强英雄欧尔麦特后，他继承了"One For All"的力量，进入雄英高校学习成为职业英雄。',
      'academia': '在超能力"个性"成为常态的世界里，没有个性的绿谷出久梦想成为英雄。在遇到最强英雄欧尔麦特后，他继承了"One For All"的力量，进入雄英高校学习成为职业英雄。',
      'boku': '在超能力"个性"成为常态的世界里，没有个性的绿谷出久梦想成为英雄。在遇到最强英雄欧尔麦特后，他继承了"One For All"的力量，进入雄英高校学习成为职业英雄。',
      '我英': '在超能力"个性"成为常态的世界里，没有个性的绿谷出久梦想成为英雄。在遇到最强英雄欧尔麦特后，他继承了"One For All"的力量，进入雄英高校学习成为职业英雄。',
      
      // 链锯人
      'chainsaw': '电次因为父亲的债务过着贫困生活，与恶魔电锯人波奇塔相依为命。在一次意外中，电次与波奇塔融合，获得了变身为链锯人的能力，被公安收留成为恶魔猎人。',
      '链锯': '电次因为父亲的债务过着贫困生活，与恶魔电锯人波奇塔相依为命。在一次意外中，电次与波奇塔融合，获得了变身为链锯人的能力，被公安收留成为恶魔猎人。',
      
      // 四月是你的谎言
      'april': '钢琴天才有马公生因为母亲的死失去了听见钢琴声的能力。直到遇见了自由奔放的小提琴手宫园薰，她用音乐重新点亮了公生内心的光芒，但命运却和他们开了一个残酷的玩笑。',
      'lie': '钢琴天才有马公生因为母亲的死失去了听见钢琴声的能力。直到遇见了自由奔放的小提琴手宫园薰，她用音乐重新点亮了公生内心的光芒，但命运却和他们开了一个残酷的玩笑。',
      '四月': '钢琴天才有马公生因为母亲的死失去了听见钢琴声的能力。直到遇见了自由奔放的小提琴手宫园薰，她用音乐重新点亮了公生内心的光芒，但命运却和他们开了一个残酷的玩笑。',
      
      // 孤独摇滚
      'bocchi': '极度内向的后藤一里因为憧憬吉他手而开始练习吉他，梦想着能够加入乐队。机缘巧合下她加入了"结束乐队"，与伙伴们一起在音乐中寻找自己的价值。',
      'rock': '极度内向的后藤一里因为憧憬吉他手而开始练习吉他，梦想着能够加入乐队。机缘巧合下她加入了"结束乐队"，与伙伴们一起在音乐中寻找自己的价值。',
      '孤独': '极度内向的后藤一里因为憧憬吉他手而开始练习吉他，梦想着能够加入乐队。机缘巧合下她加入了"结束乐队"，与伙伴们一起在音乐中寻找自己的价值。',
      
      // 转生成蜘蛛
      'spider': '女高中生意外转生为最弱的魔物蜘蛛，在危险的地下迷宫中努力生存。通过不断战斗和进化，她逐渐变强，同时揭开了这个世界隐藏的秘密。',
      '蜘蛛': '女高中生意外转生为最弱的魔物蜘蛛，在危险的地下迷宫中努力生存。通过不断战斗和进化，她逐渐变强，同时揭开了这个世界隐藏的秘密。',
      
      // 葬送的芙莉莲
      'frieren': '在勇者一行打败魔王后，精灵魔法师芙莉莲开始了新的旅程。作为近乎永生的精灵，她在漫长的旅途中学会理解人类的情感，探寻魔法的奥秘。',
      '芙莉莲': '在勇者一行打败魔王后，精灵魔法师芙莉莲开始了新的旅程。作为近乎永生的精灵，她在漫长的旅途中学会理解人类的情感，探寻魔法的奥秘。',
      '葬送': '在勇者一行打败魔王后，精灵魔法师芙莉莲开始了新的旅程。作为近乎永生的精灵，她在漫长的旅途中学会理解人类的情感，探寻魔法的奥秘。',
      
      // 无职转生
      'mushoku': '34岁尼特族因意外死亡，转生到异世界成为魔法天才鲁迪乌斯。他决定在这个新世界中认真生活，不再重复前世的错误，与各种各样的人相遇，逐渐成长。',
      'tensei': '34岁尼特族因意外死亡，转生到异世界成为魔法天才鲁迪乌斯。他决定在这个新世界中认真生活，不再重复前世的错误，与各种各样的人相遇，逐渐成长。',
      '无职': '34岁尼特族因意外死亡，转生到异世界成为魔法天才鲁迪乌斯。他决定在这个新世界中认真生活，不再重复前世的错误，与各种各样的人相遇，逐渐成长。',
      
      // 约定的梦幻岛
      'promised': '在看似幸福的孤儿院中，艾玛、诺曼和雷发现了这里隐藏的可怕秘密——孩子们实际上是被当作食物饲养的。他们策划逃脱计划，带领所有孩子逃离这个地狱。',
      'neverland': '在看似幸福的孤儿院中，艾玛、诺曼和雷发现了这里隐藏的可怕秘密——孩子们实际上是被当作食物饲养的。他们策划逃脱计划，带领所有孩子逃离这个地狱。',
      '约定': '在看似幸福的孤儿院中，艾玛、诺曼和雷发现了这里隐藏的可怕秘密——孩子们实际上是被当作食物饲养的。他们策划逃脱计划，带领所有孩子逃离这个地狱。',
      
      // 死神
      'bleach': '拥有灵力的高中生黑崎一护为了保护家人和朋友，继承了死神朽木露琪亚的力量。他与各种虚（恶灵）战斗，踏上了成为真正死神的道路。',
      '死神': '拥有灵力的高中生黑崎一护为了保护家人和朋友，继承了死神朽木露琪亚的力量。他与各种虚（恶灵）战斗，踏上了成为真正死神的道路。',
      
      // 七龙珠
      'dragon': '孙悟空在寻找七龙珠的冒险中不断变强，与各种强敌战斗。在DAIMA篇中，悟空等人被变成了小孩的模样，在魔界展开全新的冒险。',
      'ball': '孙悟空在寻找七龙珠的冒险中不断变强，与各种强敌战斗。在DAIMA篇中，悟空等人被变成了小孩的模样，在魔界展开全新的冒险。',
      '龙珠': '孙悟空在寻找七龙珠的冒险中不断变强，与各种强敌战斗。在DAIMA篇中，悟空等人被变成了小孩的模样，在魔界展开全新的冒险。',
      
      // 蓝色监狱
      'blue': '为了培养出能够率领日本队夺得世界杯的前锋，300名高中生被集中到"蓝色监狱"进行残酷的选拔训练。只有最自私、最有野心的前锋才能生存下来。',
      'lock': '为了培养出能够率领日本队夺得世界杯的前锋，300名高中生被集中到"蓝色监狱"进行残酷的选拔训练。只有最自私、最有野心的前锋才能生存下来。',
      '蓝锁': '为了培养出能够率领日本队夺得世界杯的前锋，300名高中生被集中到"蓝色监狱"进行残酷的选拔训练。只有最自私、最有野心的前锋才能生存下来。',
    };
    
    // 尝试匹配动漫标题
    for (final entry in synopsisMap.entries) {
      if (titleLower.contains(entry.key)) {
        return entry.value;
      }
    }
    
    // 如果没有找到匹配的中文简介，尝试简单的英文翻译提示
    if (originalSynopsis.isNotEmpty && originalSynopsis.length > 100) {
      return '本作品讲述了一个精彩的故事...\n\n（原文简介较长，建议查看官方中文介绍获取详细剧情）';
    }
    
    // 返回原文或默认文本
    return originalSynopsis.isNotEmpty ? originalSynopsis : '暂无中文简介';
  }
} 